Some programming languages, like Agda, Coq, and Lean, go beyond transforming inputs to outputs by also formalizing logical reasoning and verifying code correctness. They use a functional style with constructors, recursion, and pattern matching, but also include a dependent type system, which adds this extra expressiveness. Using Agda and Lean, we will learn all these concepts, both from a theoretical and practical point of view. All this through many examples such as demonstrating arithmetic properties or analyzing the complexity of sorting algorithms.
This workshop has two objectives:
The Basics - From Haskell to Agda
In a nutshell - Dependent types
Hands on - Arithmetic & Propositions
The Basics - From proofs to programs
In a nutshell - Logic & the Curry-Howard correspondence
Hands on - Tactics
All in practice: Sorting algorithms
Outro
Software engineers